﻿Imports sonicERPinfo
Imports System.Data.SqlClient

Public Class ClienteDAL
    Implements InterfaceDAL

    Dim dal As New DAL
    Dim b As Boolean

    Dim l As New List(Of ClienteInfo)
    Dim telefone As New List(Of TelefoneInfo)
    Public Function GetTipoCliente(ByVal cliente As ClienteInfo)

        Try

            Dim select_ As String = "SELECT_TIPOCLIENTE"
            Dim entidade As New ArrayList()
            entidade.Add(cliente.id)
            entidade.Add(cliente.tipocliente)

            Dim obj As New ArrayList()
            obj.Add("id")
            obj.Add("tipocliente")
            Return dal.SqlEcuteReader(select_, True, New ArrayList(), entidade, False, 2, cliente, obj, False)

        Catch ex As SqlException
            Throw New Exception(ex.Message)
        End Try
    End Function


    Public Sub Delete(ByVal tabela As sonicERPinfo.Tabelainfo) Implements InterfaceDAL.Delete
        Try


            Dim select_ As String = "DELETECLIENTE"
            Dim parameter As New ArrayList
            parameter.Add("@id")

            Dim entidade As New ArrayList
            entidade.Add(tabela.cliente.id)

            dal.SQLExecuteNonQuery(select_, True, parameter, entidade, True)
        Catch ex As SqlException
            Throw New Exception(ex.Message)
        End Try
    End Sub

    Private Function FindCliente(ByVal c As Object)
        Dim i As Integer = 0
        If Not b Then

            For Each item As Object In c
                Dim cli As New ClienteInfo
                cli = c(i)
                i += 1
                l.Add(cli)
            Next
        Else

            For Each item As Object In c
                Dim tel As New TelefoneInfo
                tel = c(i)
                i += 1
                telefone.Add(tel)
            Next
        End If
        b = True

        Return True
    End Function

    Public Overloads Sub Insert(ByVal tabela As sonicERPinfo.Tabelainfo) Implements InterfaceDAL.Insert

    End Sub

    Public Overloads Function Insert(ByVal tabela As sonicERPinfo.Tabelainfo, ByVal sobrecarga As Boolean) As Object Implements InterfaceDAL.Insert
        Try

            Dim select_ As String = "INSERTCLIENTE"

            Dim parameter As New ArrayList
            parameter.Add("@idusuario")
            parameter.Add("@idTipoCliente")
            parameter.Add("@Nome")
            parameter.Add("@E_mail")
            parameter.Add("@Cep")
            parameter.Add("@Estado")
            parameter.Add("@Cidade")
            parameter.Add("@Rua")
            parameter.Add("@Numero")
            parameter.Add("@Bairro")
            parameter.Add("@Inativo")
            parameter.Add("@contato")
            parameter.Add("@Rg")
            parameter.Add("@Cpf")
            parameter.Add("@Inscricao_estadual")
            parameter.Add("@Cnpj")
            Dim entidade As New ArrayList
            entidade.Add(tabela.cliente.idusuario)
            entidade.Add(tabela.cliente.idtipocliente)
            entidade.Add(tabela.cliente.nomecliente)
            entidade.Add(tabela.cliente.email)
            entidade.Add(tabela.cliente.cep)
            entidade.Add(tabela.cliente.estado)
            entidade.Add(tabela.cliente.cidade)
            entidade.Add(tabela.cliente.rua)
            entidade.Add(tabela.cliente.numero)
            entidade.Add(tabela.cliente.bairro)
            entidade.Add(tabela.cliente.inativo)
            entidade.Add(tabela.cliente.contato)
            entidade.Add(tabela.cliente.rg)
            entidade.Add(tabela.cliente.cpf)
            entidade.Add(tabela.cliente.Inscricao_estadual)
            entidade.Add(tabela.cliente.cnpj)

            Dim obj As New ArrayList
            obj.Add("id")


            Return dal.SqlEcuteReader(select_, True, parameter, entidade, True, 1, tabela.cliente, obj, True)

        Catch ex As SqlException
            Throw New Exception(ex.Message)
        End Try

    End Function

    Public Sub Update(ByVal tabela As sonicERPinfo.Tabelainfo) Implements InterfaceDAL.Update
        Try

            Dim select_ As String = "UPDATE_CLIENTE"

            Dim parameter As New ArrayList
            parameter.Add("@id")
            parameter.Add("@idusuario")
            parameter.Add("@Nome")
            parameter.Add("@E_mail")
            parameter.Add("@Cep")
            parameter.Add("@Estado")
            parameter.Add("@Cidade")
            parameter.Add("@Rua")
            parameter.Add("@Numero")
            parameter.Add("@Bairro")
            parameter.Add("@Inativo")
            parameter.Add("@contato")
            parameter.Add("@Rg")
            parameter.Add("@Cpf")
            parameter.Add("@Inscricao_estadual")
            parameter.Add("@Cnpj")
            Dim entidade As New ArrayList
            entidade.Add(tabela.cliente.id)
            entidade.Add(tabela.cliente.idusuario)
            entidade.Add(tabela.cliente.nomecliente)
            entidade.Add(tabela.cliente.email)
            entidade.Add(tabela.cliente.cep)
            entidade.Add(tabela.cliente.estado)
            entidade.Add(tabela.cliente.cidade)
            entidade.Add(tabela.cliente.rua)
            entidade.Add(tabela.cliente.numero)
            entidade.Add(tabela.cliente.bairro)
            entidade.Add(tabela.cliente.inativo)
            entidade.Add(tabela.cliente.contato)
            entidade.Add(tabela.cliente.rg)
            entidade.Add(tabela.cliente.cpf)
            entidade.Add(tabela.cliente.Inscricao_estadual)
            entidade.Add(tabela.cliente.cnpj)

            dal.SQLExecuteNonQuery(select_, True, parameter, entidade, True, True, True)
        Catch ex As SqlException
            Throw New Exception(ex.Message)
        End Try

    End Sub

    Public Function Getlista(ByVal tabela As sonicERPinfo.Tabelainfo) Implements InterfaceDAL.Getlista
        Dim select_ As String = "SELECTCLIENTE"
        Dim parameter As New ArrayList
        parameter.Add("@dtinicio")
        parameter.Add("@dtfim")
        parameter.Add("@nomecliente")
        parameter.Add("@tipo_cliente")

        Dim entidade As New ArrayList
        entidade.Add(tabela.cliente.dtinicio.Value.Date.ToString("yyyy/MM/dd HH:mm:ss"))
        entidade.Add(tabela.cliente.dt_fim.Value.Date.ToString("yyyy/MM/dd HH:mm:ss"))
        entidade.Add(tabela.cliente.nomecliente)
        entidade.Add(tabela.cliente.tipocliente)

        Dim dt As DataView = dal.SqlDataAdapter(select_, True, parameter, entidade, True)
        Dim id As Integer = 0
        Dim lt As New List(Of ClienteInfo)
        Dim cli As New ClienteInfo
        Dim novo As Boolean = False
        For index = 0 To dt.Count - 1

            If (id <> Integer.Parse(dt.Table.Rows(index)(0))) Then
                cli = New ClienteInfo
                cli.id = CType(dt.Table.Rows(index)(0), Integer)
                id = cli.id
                cli.nomecliente = dt.Table.Rows(index)(1)
                cli.tipocliente = dt.Table.Rows(index)(2)
                cli.email = dt.Table.Rows(index)(3)
                cli.dt_cadastro = CType(dt.Table.Rows(index)(4), DateTime)
                cli.contato = dt.Table.Rows(index)(5)
                novo = True
            Else
                novo = False
            End If

            If (id.Equals(dt.Table.Rows(index)(6))) Then
                Dim tel As New TelefoneInfo
                tel.id = CType(dt.Table.Rows(index)(6), Integer)
                tel.idTipoTelefone = dt.Table.Rows(index)(7)
                tel.telefone = dt.Table.Rows(index)(8)
                cli.telefones.Add(tel)

            End If
            If novo Then
                lt.Add(cli)
            End If
        Next


        Return lt

    End Function
    Public Function PointFToPoint() As Object
        Return New Object
    End Function
    Public Function GetlistaID(ByRef tabela As sonicERPinfo.Tabelainfo)
        Dim select_ As String = "SELECTCLIENTE_ID"
        Dim parameter As New ArrayList
        parameter.Add("@ID")

        Dim entidade As New ArrayList


        entidade.Add(tabela.cliente.id)


        Dim objeto As New List(Of String)
        objeto.Add("id")
        objeto.Add("idtipocliente")
        objeto.Add("nomecliente")
        objeto.Add("email")
        objeto.Add("dt_cadastro")
        objeto.Add("cep")
        objeto.Add("estado")
        objeto.Add("cidade")
        objeto.Add("rua")
        objeto.Add("numero")
        objeto.Add("contato")
        objeto.Add("bairro")
        objeto.Add("rg")
        objeto.Add("cpf")
        objeto.Add("Inscricao_estadual")
        objeto.Add("cnpj")

        objeto.Add("id")
        objeto.Add("idtelefone")
        objeto.Add("telefone")

        Dim obj As New ArrayList
        obj.Add(tabela.cliente)
        obj.Add(tabela.telefone)

        Dim totalcolunas As New List(Of Integer)
        totalcolunas.Add(16)
        totalcolunas.Add(3)

        Dim lista As New List(Of Object)
        lista = dal.SqlEcuteReader(select_, True, parameter, entidade, True, obj, objeto, totalcolunas)

        Dim i As Integer = 0
        For index = 0 To lista.Count - 1

            If (lista(index).GetType().Equals(tabela.telefone.GetType())) Then
                If (lista(index).GetType().GetProperty("id").GetValue(lista(index), Nothing) = l(i).id) Then
                    l(i).telefones.Add(lista(index))

                Else
                    i += 1
                End If

            Else

                l.Add(lista(index))
            End If
        Next



        tabela.cliente = l.ToList(0)




        Return tabela.cliente
    End Function


End Class
